package com.wc.fortnight_blue_bridge.Q231125.Q8732;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

/**
 * @Author congege
 * @Description
 * @Date Created in 2023/11/26-16:12
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int q = sc.nextInt();
        int[] powers = new int[m + 1];
        /**
         * 合并区间使用
         */
        HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();

        /**
         * 差分使用
         */
        int[] dp = new int[n + 2];

        for (int i = 1; i <= m; i++) {
            powers[i] = sc.nextInt();
            map.put(i, new ArrayList<>());
        }

        while (q-- > 0) {
            int p = sc.nextInt();
            int l = sc.nextInt();
            int r = Math.min(l + powers[p] - 1, n);
            ArrayList<Integer> arrayList = map.get(p);
            int size = arrayList.size();
            if (size == 0) {
                arrayList.add(l);
                arrayList.add(r);
            } else {
                for (int i = 0; i < size; i += 2) {
                    int curL = arrayList.get(i);
                    int curR = arrayList.get(i + 1);

                    // 左在左边
                    if (l < curL) {
                        // 右在左边
                        if (r < curL) {
                            arrayList.add(i, r);
                            arrayList.add(i, l);
                            size += 2;
                            break;
                        } else {
                            arrayList.set(i, l);
                            // 右在中间
                            if (r <= curR) {
                                break;
                                // 右在右边
                            } else {
                                l = curR + 1;
                            }
                        }
                    } else {
                        // 左在中间,右在右边才有用
                        if (l <= curR) {
                            // 右在中间
                            if (r <= curR) {
                                break;
                                // 右在右边
                            } else {
                                l = curR + 1;
                            }
                        }
                    }
                }
                if (l > arrayList.get(size - 1)) {
                    arrayList.add(l);
                    arrayList.add(r);
                }
            }
        }
        // 差分
        for (int i = 1; i <= m; i++) {
            ArrayList<Integer> arrayList = map.get(i);
            int size = arrayList.size();
            for (int j = 0; j < size; j += 2) {
                int l = arrayList.get(j);
                int r = arrayList.get(j + 1);
                dp[l] += 1;
                dp[r + 1] -= 1;
            }
        }
        // 恢复
        for (int i = 1; i <= n; i++) {
            dp[i] += dp[i - 1];
        }
        StringBuffer ans = new StringBuffer();

        ans.append(dp[1]);

        for (int i = 2; i <= n; i++) {
            ans.append(' ');
            ans.append(dp[i]);
        }
        System.out.println(ans);
    }
}
